/*
 * servidor.cpp
 *
 *  Created on: 03/10/2011
 *      Author: guido
 */

#include "servidor.h"
#include "constantes.h"
#include "aceptador-clientes.h"
#include <stdio.h>
#include <cstring>
#include <stdlib.h>

Servidor::Servidor(short unsigned int puerto, char* rutaUsuarios)
try :
		socket(puerto), usuarios(rutaUsuarios) {
	this->seguirAceptando = true;
}
catch (ArchivoVacioException& ex) {
	throw;
}

Servidor::~Servidor() {

}

int Servidor::start() {
	if (!archivoClientes.good()) {
		return ERROR_PARAMETROS;
	} else {
		AceptadorClientes aceptador = new AceptadorClientes(this);
		aceptador.start();
		char caracter;
		do {
			std::cin >> caracter;
		} while (caracter != 'q');
		if (caracter == 'q') {
			this->seguirAceptando = false;
			this->shutdown();
		}
		aceptador.esperarFin();
		delete aceptador;
		//TODO esperar que los threads se cierren, para que
		//no cierre el archivo mientras se le graban datos
	}
	return 0;
}

int Servidor::endianOpuesto(int i) {
	int temp = (i << 24) & 0xFF000000;
	temp += (i << 8) & 0x00FF0000;
	temp += (i >> 8) & 0x0000FF00;
	temp += i >> 24 & 0x000000FF;
	return temp;
}



void Servidor::shutdown() {
	socket.cerrar();
}

void MetodoReceiveSend::run() {

}

